/**
 * **[高斯误差函数](http://en.wikipedia.org/wiki/Error_function)**
 *
 * `errorFunction(x/(sd * Math.sqrt(2)))` 表示在标准偏差为 `sd` 的正态分布中，一个值在距离均值 `x` 范围内的概率。
 *
 * 该函数返回对精确值的数值近似。它使用 Horner 方法来计算 τ (tau) 的多项式。
 *
 * @param {number} x 输入值
 * @return {number} 误差估计值
 * @example
 * errorFunction(1).toFixed(2); // => '0.84'
 */
function errorFunction(x) {
    const t = 1 / (1 + 0.5 * Math.abs(x));
    const tau =
        t *
        Math.exp(
            -x * x +
                ((((((((0.17087277 * t - 0.82215223) * t + 1.48851587) * t -
                    1.13520398) *
                    t +
                    0.27886807) *
                    t -
                    0.18628806) *
                    t +
                    0.09678418) *
                    t +
                    0.37409196) *
                    t +
                    1.00002368) *
                    t -
                1.26551223
        );
    if (x >= 0) {
        return 1 - tau;
    } else {
        return tau - 1;
    }
}

export default errorFunction;
